#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <functional>
using namespace std;
using namespace __gnu_pbds;
typedef tree<int, null_type, less<int>, rb_tree_tag,
tree_order_statistics_node_update>
ordered_set;
typedef long long int lli;
#define rep(i, a, n) for (lli i = a; i < n; i++)
#define rrep(i, n, a) for (lli i = n; i >= a; i--)
#define vlli vector<lli>
#define mii map<lli, lli>
#define umii unordered_map<lli, lli>
#define plii pair<lli, lli>
lli mod = 1e9 + 7;
void fastio()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
}
lli power(lli a, lli b)
{
lli res = 1;
while (b)
{
if (b % 2 == 0)
{
a = (a % mod * a % mod) % mod;
b = b / 2;
}
else
{
res = (res % mod * a % mod) % mod;
b--;
}
}
return res % mod;
}
lli mod_inv(lli a)
{
return power(a,mod-2);
}
int main()
{
fastio();
int n,m;
cin>>n>>m;
lli a=1,b=1,c=1;
rep(i,1,n+2*m)
{
a=(a*i)%mod;
if(i<n){
c=(c*i)%mod;
}
if(i<=2*m){
b=(b*i)%mod;
}
}
// cout<<a<<" "<<b<<" "<<c<<"\n";
lli ans=a;
ans=(ans*mod_inv(b))%mod;
ans=(ans*mod_inv(c))%mod;
cout<<ans;
return 0;
}
779. K-th Symbol in Grammar | 701. Insert into a Binary Search Tree |
429. N-ary Tree Level Order Traversal | 739. Daily Temperatures |
647. Palindromic Substrings | 583. Delete Operation for Two Strings |
518. Coin Change 2 | 516. Longest Palindromic Subsequence |
468. Validate IP Address | 450. Delete Node in a BST |
445. Add Two Numbers II | 442. Find All Duplicates in an Array |
437. Path Sum III | 436. Find Right Interval |
435. Non-overlapping Intervals | 406. Queue Reconstruction by Height |
380. Insert Delete GetRandom O(1) | 332. Reconstruct Itinerary |
368. Largest Divisible Subset | 377. Combination Sum IV |
322. Coin Change | 307. Range Sum Query - Mutable |
287. Find the Duplicate Number | 279. Perfect Squares |
275. H-Index II | 274. H-Index |
260. Single Number III | 240. Search a 2D Matrix II |
238. Product of Array Except Self | 229. Majority Element II |